package com.android.yummycookies.model.commonModel.observerPattern;

import java.util.HashSet;
import java.util.Set;

/**
 * Classe generique permetant d'utiliser le pattern observer
 * 
 * @author julien
 * 
 * @param <T>
 *            Le type d'identifiant de notification
 * @param <J>
 *            Le type des donnees necessaires pour mettre a jour les observeurs
 */
public class Observable<T, J> {

	/**
	 * Ensemble des observeurs a notifier
	 */
	private Set<IObserver<T,J>> observers = new HashSet<IObserver<T,J>>();
	
	public Observable() {
	
	}
	
	/**
	 * Ajoute un observeur
	 * @param observer l'observeur a notifier
	 * @return true si l'observeur a pu etre ajoute a l'ensemble des observeurs
	 */
	public boolean addObserver(IObserver<T,J> observer){
		return observers.add(observer);
	}
	
	/**
	 * Supprime un observeur
	 * @param observer l'observeur a suppprimer
	 * @return true si l'observeur a pu etre supprime a l'ensemble des observeurs
	 */
	public boolean removeObserver(IObserver<T,J> observer){
		return observers.remove(observer);
	}
	
	/**
	 * Notifie l'ensemble des observeurs
	 * @param id un identifiant de notification
	 * @param object les donnees permetant de mettre a jour les observeurs
	 */
	public void notifyObservers(T id, J object){
		for (IObserver<T,J> o : observers) {
			o.update(id, object);
		}
	}
}
